﻿
package CutLoad.cookies{
	import CutLoad.Base;
	
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.utils.ByteArray;

	/**
	 * png图片透明
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 
	 */	
	public class BitmapDataTool {
		/**
		 * 从库中获得 BitmapData实例
		 * @param className 库名linkname
		 * @param w 图片宽
		 * @param h 图片高
		 * @return 
		 * 
		 */		
		public static function getStrClassBitmapData(className:String,w:Number,h:Number):BitmapData{
			var classImg:Class=Base.getStrClass(className);
			return new classImg(w,h);
		}
		/**
		 * 从库中获得 BitmapData实例并把它包进Base
		 * @param className 库名linkname
		 * @param w 图片宽
		 * @param h 图片高
		 * @return 
		 * 
		 */		
		public static function getStrClassInBase(className:String,w:Number,h:Number):Base{
			var db:BitmapData=getStrClassBitmapData(className,w,h);
			return Painter.drawImg(db);
		}
		/**
		 * 
		 * @param image
		 * @return 获得一个不透明的BitmapData
		 * 
		 */
		public static function createBitmapData(image:DisplayObject):BitmapData {
			var bitmap:BitmapData = new BitmapData(image.width, image.height);
			bitmap.draw(image);
			return bitmap;
		}
		/**
		 * 
		 * @param image
		 * @return 获得图像的透明部份 BitmapData
		 * 
		 */
		public static function createAlphaBitmapData(image:DisplayObject):BitmapData {
			var bitmap:BitmapData = new BitmapData(image.width, image.height);

			bitmap.draw(image, null, null, BlendMode.ALPHA);
			return bitmap;
		}
		//
		/**
		 * 
		 * @param image
		 * @return 获得一个透明的BitmapData
		 * 
		 */
		public static function getAlphaImg(image:DisplayObject):BitmapData {
			var bitmap:BitmapData = BitmapDataTool.createBitmapData(image);
			var bitmapAlpha:BitmapData = BitmapDataTool.createAlphaBitmapData(image);
			var db:BitmapData=new BitmapData(bitmap.rect.width,bitmap.rect.height,true,0x00000000);
			//
			db.copyPixels(bitmap, bitmap.rect, new Point(0,0), bitmapAlpha, new Point(0, 0), true);
			return db;
		}
		/**
		 * 重新设置BitmapData的大小 
		 * @param bitmapdata
		 * @param w
		 * @param h
		 * @return 
		 * 
		 */				
		public static function setWHBitmapData(bitmapdata:BitmapData,w:Number,h:Number):BitmapData{
			var img:Bitmap=new Bitmap(bitmapdata);
			img.width=w;
			img.height=h;
			var reBitmapdata:BitmapData=new BitmapData(w,h);
			reBitmapdata.draw(img);
			return reBitmapdata;
		}
		/**
		 * 把 BitmapData分割成几行几列的BitmapData数组
		 * @param row 行
		 * @param column 列
		 * @return 
		 * 
		 */		
		public static function cutBitmapDataToTile(bd:BitmapData,row:Number,column:Number):Array{
			var arrReturn:Array=new Array();
			var tileW:Number=Math.floor(bd.width/column);
			var tileH:Number=Math.floor(bd.height/row);
			//
			var endtileW:Number=bd.width-tileW*(column-1)
			var endtileH:Number=bd.height-tileH*(row-1)
			//
			for(var i:Number=0;i<row;i++){
				var arrRow:Array=new Array();
				for(var j:Number=0;j<column;j++){
					var bdTem:BitmapData=new BitmapData(tileW,tileH);
					var rect:Rectangle
					var temW:Number=(j==column-1?endtileW:tileW);
					var temH:Number=(i==row-1?endtileH:tileH);
					rect=new Rectangle(j*tileW,i*tileH,temW,temH);
					var bytes:ByteArray=bd.getPixels(rect);
					bytes.position=0;
					var setRect:Rectangle
					setRect=new Rectangle(0,0,temW,temH)
					/*trace("-------------"+i+" "+j)
					trace(rect);
					trace(setRect);*/
					bdTem.setPixels(setRect,bytes);
					arrRow.push(bdTem.clone());
				}
				arrReturn.push(arrRow);
			}
			return arrReturn;
		}
	}
}